/*
 * Copyright (C) 2017 Pingan, Inc. All Rights Reserved.
 */

package com.pingan.haofang.searchcloud.indexdatasource.service;

import java.util.Collection;
import java.util.List;
import java.util.Set;

import com.pingan.haofang.searchcloud.indexdatasource.dto.DatasourceCacheKeyDto;
import com.pingan.haofang.searchcloud.indexdatasource.dto.IndexDatasourceBuildDTO;
import com.pingan.haofang.searchcloud.indexdatasource.dto.IndexDatasourceDTO;
import org.quartz.SchedulerException;

/**
 * 索引数据源业务逻辑
 *
 * @author zhangbi617
 * @date 04/05/2017
 */
public interface IndexDatasourceService {

    /**
     * 根据数据源ID获取
     *
     * @param id 数据源ID
     * @return
     */
    IndexDatasourceDTO getById(Long id);

    /**
     * 创建
     *
     * @param indexDatasourceDTO
     * @return
     */
    boolean createDatasource(IndexDatasourceDTO indexDatasourceDTO) throws SchedulerException;

    /**
     * 更新索引数据源设置
     *
     * @param indexDatasourceDTO 索引构建DTO
     */
    boolean updateDatasource(IndexDatasourceDTO indexDatasourceDTO) throws SchedulerException;

    /**
     * 删除数据源
     *
     * @param id 数据源ID
     * @return
     */
    DatasourceCacheKeyDto deleteDatasource(Long id) throws SchedulerException;

    /**
     * 根据索引ID读取索引数据源列表
     *
     * @param indexId 索引ID
     * @return 索引导入任务
     */
    List<IndexDatasourceDTO> getByIndexId(Long indexId);

    /**
     * 查询索引数据源
     *
     * @param indexId 索引ID
     * @param name    数据源名
     * @return
     */
    List<IndexDatasourceDTO> findDatasource(Long indexId, String name);

    /**
     * 查询索引数据源列表
     *
     * @param projectCode    项目编码
     * @param indexName      索引名称
     * @param datasourceName 数据源名称
     * @return
     */
    IndexDatasourceDTO findDatasource(String projectCode, String indexName, String datasourceName);

    /**
     * 查询索引数据源列表
     *
     * @param projectCode 项目编码
     * @param indexName   索引名称
     * @return 索引导入任务
     */
    List<IndexDatasourceDTO> findDatasource(String projectCode, String indexName);

    /**
     * 根据索引ID获取数据源
     *
     * @param indexIdList 索引列表
     * @return
     */
    List<IndexDatasourceDTO> findDatasourceByIndexIds(Collection<Long> indexIdList);


    /**
     * 修改datasource build
     *
     * @param indexDatasourceBuildDTO 数据源导入修改
     */
    void updateDatasourceBuild(IndexDatasourceBuildDTO indexDatasourceBuildDTO) throws SchedulerException;

    /**
     * 获取datasource build
     *
     * @param indexId 索引ID
     * @return
     */
    IndexDatasourceBuildDTO getDatasourceBuild(Long indexId);

    /**
     * 获取datasourceBuild
     *
     * @param indexIds
     * @return
     */
    List<IndexDatasourceBuildDTO> findDatasourceBuildByIndexIds(Set<Long> indexIds);

    /**
     * 根据数据源获取基本信息
     *
     * @param datasourceId
     * @return
     */
    IndexDatasourceDTO findByIdSimple(Long datasourceId);

    /**
     * 清除数据源缓存
     *
     * @param keyDto
     */
    void datasourceCacheEvict(DatasourceCacheKeyDto keyDto);
}
